#include <iostream>
#include <stack>
#include <queue>
#include <vector>
#include <deque>
#include "stack.h"
#include "queue.h"
#include "priority_queue.h"
// void StackTest()
// {
//     std::stack<int> s;
//     std::stack<int> s1;
//     s1.push(10);
//     s1.push(20);
//     s1.push(30);
//     s1.push(40);
//     s.swap(s1);
//     //栈不支持遍历
//     std::cout << "栈内元素个数:" << s.size() << std::endl;
//     while(!s.empty())
//     {
//         std::cout << s.top() << " ";
//         s.pop();
//     }
//     std::cout << std::endl;
// }
// void QueueTest()
// {
//     std::queue<int> q;
//     std::queue<int> q1;
//     q1.push(10);
//     q1.push(20);
//     q1.push(30);
//     q1.push(40);
//     q.swap(q1);
//     std::cout << "队列内的元素个数:" << q.size() << std::endl;
//     while(!q.empty())
//     {
//         //打印对头的数据
//         //std::cout << q.front() << std::endl;
//         //打印队头的数据以及队尾的数据
//         std::cout << "队头:" << q.front() << " 队尾:" << q.back() << std::endl;
//         //出对头的数据
//         q.pop();
//     }
//     std::cout << std::endl;
// }
// void PrirityQueueTest()
// {
//     std::priority_queue<int,std::vector<int>,std::greater<int>> pq;
//     //一组随机值
//     std::vector<int> v = {8,2,10,4,9,6,7,5,3,1};
//     // for(int i = 0;i < sizeof(arr)/sizeof(arr[0]);i++)
//     // {
//     //     pq.push(arr[i]);
//     // }
//     for(const auto &e : v)
//     {
//         pq.push(e);
//     }
//     //打印
//     while(!pq.empty())
//     {
//         std::cout << pq.top() << " ";
//         pq.pop();
//     }
//     std::cout << std::endl;
// }
/******************************************************************************/
void AA(const Aurora::stack<int,std::vector<int>> s)
{
    std::cout << "栈中元素个数:" << s.size() << std::endl;
    std::cout << "栈顶元素:" << s.top() << std::endl;
    std::cout << "栈是否为空:" << s.empty() << std::endl;
}
void StackTest()
{
    Aurora::stack<int,std::vector<int>> s;
    for(int i = 1;i <= 5;i++)
    {
        s.push(i*10);
    }
    AA(s);
    //计算栈中元素个数
    std::cout << "栈中元素个数:" << s.size() << std::endl;
    while(!s.empty())
    {
        std::cout << s.top() << " ";
        s.pop();
    }
    std::cout << std::endl;
}
void BB(Aurora::queue<int> q)
{
    std::cout << "队头的数据为:" << q.front() << std::endl;
    std::cout << "队尾的数据为:" << q.back() << std::endl;
    std::cout << "队中元素个数为:" << q.size() << std::endl;
    std::cout << "队是否为空" << q.empty() << std::endl;
}
void QueueTest()
{
    
    Aurora::queue<int> q1;
    Aurora::queue<int> q;
    for(int i = 1;i <= 5;i++)
    {
        q1.push(i*10);
    }
    q.operator=(q1);
    BB(q);
    //队列中的元素个数
    std::cout << "队列中的元素个数为:" << q.size() << std::endl;
    while(!q.empty())
    {
        std::cout << q.front() << " ";
        q.pop();
    }
    std::cout << std::endl;
}
void PriorityQueueTest()
{
    std::vector<int> v = {8,2,10,4,9,6,7,5,3,1};
    Aurora::priority_queue<int,std::vector<int>,Aurora::less<int>> pq(v.begin(),v.end());
    while(!pq.empty())
    {
        std::cout << pq.top() << " ";
        pq.pop();
    }
    std::cout << std::endl;
    //pq.Debug();
}
void test()
{
    std::priority_queue<int,std::vector<int>> pq;
    std::vector<int> v = {8,2,10,4,9,6,7,5,3,1};
    for(const auto &e : v)
    {
        pq.push(e);
    }
    while(!pq.empty())
    {
        std::cout << pq.top() << " ";
        pq.pop();
    }
    std::cout << std::endl;
}
int main()
{
    PriorityQueueTest();
    return 0;
}